export interface MemoryStatistics {
    /** 总数据量 */
    size: number;
}

export interface MemoryStoreSaveArgs<T> {
    content: T;
    embedding: number[];
}

export abstract class MemoryStore<T> {
    /**
     * 保存数据
     * @param content 要保存的数据
     * @param embedding 数据的 embedding
     * @returns 是否保存成功
     */
    abstract save(args: MemoryStoreSaveArgs<T>): Promise<boolean>;
    /**
     * 删除数据
     * @param contentEmbedding 要删除的数据的 embedding
     * @returns 是否删除成功
     */
    abstract delete(contentEmbedding: number[]): Promise<boolean>;
    /**
     * 查询数据
     * @param contentEmbedding 数据的 embedding
     * @param threshold 阈值
     * @param maxCount 最大数量
     * @returns 查询结果
     */
    abstract query(
        contentEmbedding: number[],
        threshold: number,
        maxCount: number
    ): Promise<{ similarity: number; content: T }[]>;
    /**
     * 获取统计数据
     */
    abstract getStatistics(): Promise<MemoryStatistics>;
}
